// 泛型
/*
  函数泛型定义
  定义
  function fn<T,K>(a:T):K{ return xxx}
  使用
  fn<T的类型,K的类型>（a的实参）
  
  type类型别名泛型定义
  定义
  type 变量名<T>={ code:number;data:T }
  使用
  const apiRes:变量名<number[]>={code:200,data:[1,2,3]}

  interface接口类型的泛型定义
  定义 
  interface 变量名<T> {data:T}
  使用
  const obj:变量名<string>={data:'hello'}

*/
// 函数泛型
function fn<T> (a: T): T {
  return a
}
fn<string>('hello')

const arr: Array<number> = [1, 2, 3]

// type类型别名泛型
type TApi<T> = {
  code: number
  message: string
  data: T
}
const apiRes: TApi<number[]> = {
  code: 200,
  message: '成功',
  data: [1, 2, 3]
}

const apiRes2: TApi<{ list: string[] }> = {
  code: 200,
  message: '成功',
  data: {
    list: ['a', 'b']
  }
}

// interface接口类型的泛型
interface IObj<T> {
  a: number
  b: number
  c: T
}
const obj: IObj<string> = {
  a: 1,
  b: 2,
  c: 'hello'
}

export {}
